// 版权所有 Epic Games, Inc. 保留所有权利。

#include "LyraAssetManagerStartupJob.h"

#include "LyraLogChannels.h"

/**
 * 执行任务
 */
TSharedPtr<FStreamableHandle> FLyraAssetManagerStartupJob::DoJob() const
{
	const double JobStartTime = FPlatformTime::Seconds(); // 记录任务开始时间

	TSharedPtr<FStreamableHandle> Handle; // 流式处理句柄
	UE_LOG(LogLyra, Display, TEXT("启动任务 \"%s\" 开始"), *JobName); // 记录任务开始
	JobFunc(*this, Handle); // 执行任务函数

	if (Handle.IsValid()) // 检查句柄是否有效
	{
		Handle->BindUpdateDelegate(FStreamableUpdateDelegate::CreateRaw(this, &FLyraAssetManagerStartupJob::UpdateSubstepProgressFromStreamable)); // 绑定更新委托
		Handle->WaitUntilComplete(0.0f, false); // 等待直到完成
		Handle->BindUpdateDelegate(FStreamableUpdateDelegate()); // 重新绑定更新委托（清空）
	}

	UE_LOG(LogLyra, Display, TEXT("启动任务 \"%s\" 耗时 %.2f 秒完成"), *JobName, FPlatformTime::Seconds() - JobStartTime); // 记录任务完成时间

	return Handle; // 返回句柄
}